/**
GoLang有指针，但不具备像C一样的指针运算，即便如此指针仍然强大
在GoLang中调用函数时，得记得变量是值传递。因此为了修改一个传递入
函数的值的效率和可能性，就有了指针

指针的定义时通过类型作为前缀来定义一个指针‘*’：var p *int
这个p是一个指向整数值的指针。所有新定义的变量都被赋值为其类型的
零值，指针也一样。一个新定义或没有任何指向的指针，他的零值时nil。
在其它语言中这叫做空指针null，在go中就是nil。让指针指向某些内容，可以使用
取址运算符 &
若是获取了一个值的内存地址，可以通过 * 获取内存地址对应的字面量
也可以通过获取的指针对指针所对应的字面量进行修改，那么原先的地址会改变指向别的字面量
因为指针并没有运算机制，因此像*p++，他表示的则是(*p)++，先获取这个地址所代表的字面量，
然后再对字面量进行++
*/

package main

import "fmt"

func main() {
	var p *int
	q := 10 //可以通过*p = val的方式修改q的值
	p = &q  //通过取地运算符&获取q的地址
	fmt.Printf("%v\n", p)
	fmt.Println(*p)
	*p = 11 //通过指针进行值的修改
	fmt.Println(*p, q)
	*p++
	fmt.Println(*p, q)
}
